﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using distrilan;
using System.IO;

public partial class articoli_manuale : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

      // se nella sessione non c'e niente, redirigo l'utente alla pagina di login
      //if (SiteUser.IsLoggedAdmin() == false)
      //  Server.Transfer("index.aspx");   
   

      //if( !IsPostBack ) 
      //  txtCodart.Text = "";
     
      //lblStato1.Visible = false;
      //lblStato2.Visible = false;
      //Culture = "IT-it";
      
             
    }

    /// <summary>
    /// generata in fase di cancellazione della riga dalla gridview
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void row_deleting(object sender, GridViewDeleteEventArgs e)
    {
        // leggo l'id della promozione
        int idPromozione = Convert.ToInt32(lstArtMan.DataKeys[e.RowIndex].Value);
        
        //genero la query per la selezione del documento
        String query = "SELECT documento FROM promozioni WHERE ID=" + idPromozione;

        SqlConnection connection = new SqlConnection(Utility.GetDBConnectionString());
        SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
        DataTable dt = new DataTable();
        String nomeDocumento = ConfigurationManager.AppSettings["dir_promozioni"].ToString();
        nomeDocumento = Server.MapPath("../" + nomeDocumento);
        try
        {
            connection.Open();
            adapter.Fill(dt);
            if(dt.Rows.Count != 1)
                throw new Exception ("letto un numero inconsistente di righe dalla tabella promozione con id promo" + idPromozione.ToString());
            
            DataRow riga = dt.Rows[0];
            nomeDocumento += "\\" + riga["documento"];

            File.Delete(nomeDocumento);
        }
        catch (Exception ex)
        {
            Utility.WriteLog("ERRORE", "row_deleting in modificaPromozioni.aspx.cs nella sezione admin", ex.Message, "", "");
            lblMessage.Text = "errore in fase di cancellazione del documento della promozione: " + ex.Message;
            return;
        }
        finally
        {
            connection.Close();
        }
        lblMessage.Text = "promozione cancellata!";
        lblMessage.CssClass = "lblOk";
    }

    /// <summary>
    /// aggiorna il nuovo documento legato alla promozione
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void row_updating(object sender, GridViewUpdateEventArgs e)
    {
        // leggo l'id della promozione
        int idPromozione = Convert.ToInt32(lstArtMan.DataKeys[e.RowIndex].Value);

        // Leggo la riga della gridview 
        GridViewRow row = lstArtMan.Rows[e.RowIndex];

        // Ora leggo il text Box contenuto
        FileUpload flUpload = (FileUpload)row.FindControl("flUploadDocumento");

        #region controllo valori in textbox
        //prendo i dati del titolo e li controllo
        TextBox titolo = (TextBox)row.FindControl("titolo");
        if (titolo.Text.Length == 0)
        {
            lblMessage.Text = "inserire il titolo";
            lblMessage.CssClass = "lblErrore";
            return;
        }

        //controllo che data inizio e data fine siano presenti
        TextBox dataInizio = (TextBox)row.FindControl("txtDataInizio");
        if (dataInizio.Text.Length == 0)
        {
            lblMessage.Text = "inserire data inizio promo";
            lblMessage.CssClass = "lblErrore";
            return;
        }

        TextBox dataFine = (TextBox)row.FindControl("txtDataFine");
        if (dataFine.Text.Length == 0)
        {
            lblMessage.Text = "inserire data fine promo";
            lblMessage.CssClass = "lblErrore";
            return;
        }
        #endregion

        //converto i dati in dati usabili
        String inizio = Utility.GetDateTimeInternationalFormat(dataInizio.Text);
        String fine = Utility.GetDateTimeInternationalFormat(dataFine.Text);

        //controllo che un file simile non sia già stato caricato
        if (flUpload.HasFile)
        {
            String dir_promozione = ConfigurationManager.AppSettings["dir_promozioni"].ToString();
            dir_promozione = Server.MapPath( "../" + dir_promozione + "/" + flUpload.FileName);
            bool esiste = File.Exists(dir_promozione);

            if (esiste == true)
            {
                lblMessage.Text = "esiste già un file sul server con quel nome: rinominarlo per evitare sovrascritture!";
                return;
            }
            //se il file non esiste sul server provo di caricarlo
            else
            {
                try
                {
                    flUpload.PostedFile.SaveAs(dir_promozione);
                }
                catch (Exception ex)
                {
                    lblMessage.Text = "ERRORE IN FASE DI CARICAMENTO DEL FILE: " + ex.Message;
                    return;
                }
            }
        }

        String query = "";
        
        //se c'è un file da aggiornare
        if (flUpload.HasFile)
        {
            query = "UPDATE promozioni SET titolo='" + titolo.Text + "', ";
            query += "dataInizio='" + inizio + "', dataFine='" + fine+ "'";
            query += "documento='" + flUpload.PostedFile.FileName + "' ";
            query += "WHERE ID=" + idPromozione;
        }
        else
        {
            query = "UPDATE promozioni SET titolo='" + titolo.Text + "', ";
            query += "dataInizio='" + inizio + "', dataFine='" + fine + "' ";
            query += "WHERE ID=" + idPromozione;
        }

        SqlConnection connection = new SqlConnection(Utility.GetDBConnectionString());
        SqlCommand command = new SqlCommand(query, connection);
        try
        {
            connection.Open();
            if (command.ExecuteNonQuery() != 1)
                throw new Exception("modificate un numero non congruo di righe");
        }
        catch (Exception ex)
        {
            Utility.WriteLog("ERRORE", "row_updating in modificaPromozioni.aspx.cs", ex.Message, "", "");
            lblMessage.Text = "errore in fase di modifica della promozione, errore: " + ex.Message;
            return;
        }
        finally
        {
            connection.Close();
        }
    }
  
}
